package com.cd.form.jpa.repo;

import com.cd.form.jpa.domian.FormAuth;
import com.cd.form.jpa.domian.FormAuthId;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface FormAuthRepository extends JpaRepository<FormAuth, FormAuthId> {

    // ======================================
    // ✅ 新增 / 保存（由 JpaRepository 继承）
    // ======================================

    /**
     * 保存或更新权限记录
     * 如果主键（formId + userId）已存在，则更新；否则插入新记录
     */
    // save() 方法已由 JpaRepository 提供，无需重写
    // FormAuth save(FormAuth formAuth);

    // ======================================
    // ✅ 查询方法
    // ======================================

    /**
     * 根据 formId 查询所有拥有该表单权限的用户
     */
    List<FormAuth> findById_FormId(Long formId);

    /**
     * 根据 userId 查询该用户拥有的所有表单权限
     */
    List<FormAuth> findById_UserId(Long userId);

    /**
     * 根据 formId 和 userId 查询特定权限记录（精确查询）
     */
    //Optional<FormAuth> findById_FormIdAndId_UserId(Long formId, Long userId);

    /**
     * 检查某个用户是否拥有某个表单的权限
     */
    boolean existsById_FormIdAndId_UserId(Long formId, Long userId);

    /**
     * 自定义 JPQL 查询：查询拥有指定表单权限的用户 ID 列表
     */
//    @Query("SELECT f.userId FROM FormAuth f WHERE f.formId = :formId")
//    List<Long> findUserIdsByFormId(@Param("formId") Long formId);

    /**
     * 自定义 JPQL 查询：查询用户拥有的表单 ID 列表
     */
    @Query("SELECT f.id.formId FROM FormAuth f WHERE f.id.userId = :userId")
    List<Long> findFormIdsByUserId(@Param("userId") Long userId);

    /**
     * 根据复合主键删除（推荐用于精确删除）
     */
    // void deleteById(FormAuthId id); // 已由 JpaRepository 提供
}